﻿;-----------------------------------------------------------
;  短按切换中英文输入法，长按仍旧上档键
;   作者：知乎 @查理
;   日期：2021年9月
; https://www.zhihu.com/question/470805790/answer/2022570065
;-----------------------------------------------------------
switchIME(){
    timeInterval := 50    ; 时间间隔刚好
    if (A_TimeSincePriorHotkey > timeInterval && A_PriorKey = "RShift")
    {
        Sleep 50
        If (IME_GET()=1)
        {
            send, ^{space}
            ToolTip "EN"
        }
        else
        {
            send, ^{space}
            ToolTip "CN"
        }
        Sleep 500
        ToolTip
    }
}

;----------------------------------------------------------
; 右shift键映射到 ctrl+space 进行输入法中英文切换
;----------------------------------------------------------
~$RShift::
return

~$RShift up:: switchIME()

;-----------------------------------------------------------
; IMEの状態の取得
;   対象： AHK v1.0.34以降
;   WinTitle : 対象Window (省略時:アクティブウィンドウ)
;   戻り値  1:ON 0:OFF
;-----------------------------------------------------------
IME_GET(WinTitle="")
{
    ifEqual WinTitle,, SetEnv,WinTitle,A
    WinGet,hWnd,ID,%WinTitle%
    DefaultIMEWnd := DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)

    ;Message : WM_IME_CONTROL  wParam:IMC_GETOPENSTATUS
    DetectSave := A_DetectHiddenWindows
    DetectHiddenWindows,ON
    SendMessage 0x283, 0x005,0,,ahk_id %DefaultIMEWnd%
    DetectHiddenWindows,%DetectSave%
    
    Return ErrorLevel
}